package co.gov.medellin.sdep.sisdep.model.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.MappingSqlQuery;
import org.springframework.transaction.PlatformTransactionManager;

import co.gov.medellin.sdep.sisdep.model.Tipologia;
import co.gov.medellin.sdep.sisdep.model.dao.TipologiaEspecificaDAOImpl;

//import co.gov.medellin.sdep.sisdep.model.TipologiaEspecifica;

public class TipologiaEspecificaDAOTImpl extends TipologiaEspecificaDAOImpl implements ITipologiaEspecificaDAOT {

	/** manejador de transacciones para TipologiaEspecificaDAOTImpl */
	private PlatformTransactionManager transactionManager;

	/** */
    private FindAllTipologia findAllTipologia;

	/**
	 * constructor por defecto
	 */
	public TipologiaEspecificaDAOTImpl() {
	}

	/**
	 * metodo ejemplo manejo de transacciones
	 */
	//public int updateRecordWithLog(TipologiaEspecifica tipologiaespecifica) {
	//	TransactionDefinition td = new DefaultTransactionDefinition();
	//	TransactionStatus status = getTransactionManager().getTransaction(td);
	//	try{
	//		llamado a metodos basicos en el DAO Base
	//		TipologiaEspecificaDAOImpl
	//		transactionManager.commit(status);
	//		
	//	}catch (Exception e){
	//		transactionManager.rollback(status);
	//		throw new RuntimeException(e);
	//	}
	//	return 0;
	//}

	/**
	 * retorna el transactionManager
	 * @return
	 */
	public PlatformTransactionManager getTransactionManager() {
		return transactionManager;
	}

	/**
	 * establece el transaction manager establecido en la configuracion
	 * @param transactionManager
	 */
	public void setTransactionManager(PlatformTransactionManager transactionManager) {
		this.transactionManager = transactionManager;
	}

	
	
    public void initDao() {
		super.initDao();
		findAllTipologia   = new FindAllTipologia(  getDataSource() );
	}

	// ---- BaseQueryOperation for Mapping ResultSet values --------------
	abstract class BaseQueryOperationComboBox extends MappingSqlQuery {
		public BaseQueryOperationComboBox(DataSource ds,String sql) {
	   		super(ds,sql);
		}	
		protected Object mapRow(ResultSet rs, int rownum) throws SQLException {
			Tipologia tipologia = new Tipologia();
				tipologia.setId(new Long(rs.getLong("ID")));
				tipologia.setCodigo(rs.getString("CODIGO"));
				tipologia.setValor(rs.getString("VALOR"));
			return tipologia;
		}
    }

    // ------------- FindAllTipologia -------------------------------
    class FindAllTipologia extends BaseQueryOperationComboBox {
		private static final String SQL = "SELECT ID, CODIGO, VALOR FROM REG_TIPOLOGIA_T "
				+ " WHERE " + " ID = ? " + "AND ACTIVO = ? ";

    	public FindAllTipologia(DataSource ds) {
    		super(ds,SQL);
			declareParameter( new SqlParameter(Types.CHAR) );
			declareParameter( new SqlParameter(Types.CHAR) );
			compile();
    	}
    	public List runQuery() {
			List result = execute(new Object[] { 
					new String("%"),
					new String("S")
			});
			if ( result.size() > 0 ) {
        		return result;
        	} else {
        		return null;
        	}
    	}
    }
    
    /**
     * 
     */
    public List loadTipologiaComboBox() {
		return findAllTipologia.runQuery();
	}

    public FindAllTipologia getFindAllTipologia() {
		return findAllTipologia;
	}

	public void setFindAllTipologia(FindAllTipologia findAllTipologia) {
		this.findAllTipologia = findAllTipologia;
	}

}
